﻿using System;
using System.Runtime.InteropServices;
using System.Windows.Media.Imaging;
using System.Windows;

namespace Mrkz.ImageManipulation
{
//    [Obsolete]
//    public class Image : IEquatable<Image>
//    {
//        internal Pixel[,] _data;
//        internal int _stride;
//        internal int _width;
//        internal int _height;
//        internal Int32Rect _cropArea;              

//        internal Image()
//        {
//        }
       
//        public Int32Rect CropArea 
//        { 
//            get { return _cropArea; } 
//        }

//        public int Width
//        {
//            get { return _width; }

//        }
//        public int Height
//        {
//            get { return _height; }
            
//        }

//        public bool IsValidPixelCoords(int Row, int Col)
//        {            
//            if (Col >= 0 
//                && Col < Width 
//                && Row >= 0 
//                && Row < Height)
//                return true;

//            return false;
//        }

//        public void WritePixels(WriteableBitmap DestinationImage)
//        {
//            GCHandle p = GCHandle.Alloc(_data, GCHandleType.Pinned);

//            DestinationImage.WritePixels(new Int32Rect(0, 0, _width, _height),
//                p.AddrOfPinnedObject(),
//                _width * _height * 4, _stride);

//            p.Free();
//        }

//        public void SetPixel(int Row, int Column, Pixel Pixel)
//        {
//            _data[Row, Column] = Pixel;
//        }

//        public Pixel GetPixel(int Row, int Column)
//        {
//            return _data[Row,Column];
//        }

//        public static Image operator+ (Image A, Image B)
//        {
//            if (A.Height != B.Height
//                || A.Width != B.Width)
//                throw new ArgumentException("Images must be same size");

//            Image res=ImageFactory.CreateEmptyImage(A);

//            for (int iR = 0; iR < A.Height; iR++)
//                for (int iC = 0; iC < A.Width; iC++)
//                    res.SetPixel(iR, iC, A.GetPixel(iR, iC) + B.GetPixel(iR, iC));           

//            return res;
//        }

//        public bool Equals(Image other,int tolerance)
//        {
//            if (other.Width == Width
//                && other.Height == Height
//                && other._stride == _stride
//                && other._cropArea.Equals(_cropArea))
//            {
//                //compare all pixels
//                for (int iR = 0; iR < Height; iR++)
//                    for (int iC = 0; iC < Width; iC++)
//                        if (!_data[iR, iC].Equals(other._data[iR, iC],tolerance))
//                            return false;

//                return true;
//            }
//            return false;
//        }
       
//        public bool Equals(Image other)
//        {
//            if (other.Width == Width 
//                && other.Height == Height 
//                && other._stride == _stride 
//                && other._cropArea.Equals(_cropArea))
//            {
//                //compare all pixels
//                for (int iR = 0; iR < Height; iR++)
//                    for (int iC = 0; iC < Width; iC++)
//                        if (! _data[iR, iC].Equals(other._data[iR, iC]))
//                            return false;

//                return true;
//            }
//            return false;         
//        }
//    }
}
